﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Loja.DataDTO;
using Loja.Data;
using System.Web.Mvc;

namespace Loja.Business
{
    public class VendaBLL
    {
        private IRepository<Venda> repository;
        RepositoryFactory<Venda> factory;

        public VendaBLL(bool LazyLoadingEnabled)
        {
            factory = new RepositoryFactory<Venda>();
            repository = factory.CriarRepositorioDados(LazyLoadingEnabled);
        }

        public VendaBLL()
        {
        }

        public VendaDTO GetVendaDTO(PedidoDTO pedidoDTO)
        {
            PessoaBLL pessoaBll = new PessoaBLL(false);
            PedidoBLL pedidoBll = new PedidoBLL(true);

            var comprador = pessoaBll.GetPessoaPorId(pedidoDTO.IdPessoa);
            var pedido = pedidoBll.GetPedidoPorId(pedidoDTO.IdPedido);

            var pagamentoDTO = new VendaDTO();

            pagamentoDTO.IdPessoa = comprador.IdPessoa;
            pagamentoDTO.NomeComprador = comprador.Nome;
            pagamentoDTO.ValorTotal = string.Format("{0:C}", CalcularValorTotal(pedido));
            pagamentoDTO.DataPrimeiroPagamento = DateTime.Now.ToString("dd/MM/yyyy");
            pagamentoDTO.TipoPagamentoList = new List<SelectListItem>();
            pagamentoDTO.TipoPagamentoList = GetTipoPagamentos();

            return pagamentoDTO;
        }

        private decimal CalcularValorTotal(Pedido pedido)
        {
            decimal ValorTotal = 0;

            foreach (var item in pedido.ItemPedido)
            {
                ValorTotal += item.Valor * item.Quantidade;
            }
            return ValorTotal;
        }

        private List<SelectListItem> GetTipoPagamentos()
        {
            var indicadorRepository = new DataRepository<Indicador>(true);
            var tipoPagamento = indicadorRepository.Find(i => i.TipoIndicador.Nome.Equals("TipoPagamento"));

            var tipoPagamentoSelectList = new SelectList(tipoPagamento, "IdIndicador", "Descricao").ToList();
            tipoPagamentoSelectList.Insert(0, new SelectListItem() { Selected = true, Text = "Selecione", Value = "" });

            return tipoPagamentoSelectList;
        }
    }
}
